/* (C)oded by ESPRIT 2014 - 3B2 - Undrained Group*/
/* Par:BenSlimene Marwa  */


#include "personnel.h"
#include "debug.h"
#include "gestion_personnels.h"
#include "dessiner.h"
#include "configuration.h"
#include "cryptage.h"
#include "string.h"


void modifier_personnel_gtk(personnel_db personnel[],personnel_db m, int id, int n, char msg[])
{
	int choix;
	
	int i = -1;
	
	i = recherche_personnel(personnel,id,n);
	if ( i != -1 )
	{    
		personnel[i] = m;
		strcpy(msg,"le personnel est modifié");
		exporter_personnels(personnel,n);
	}
	else
	{
		strcpy(msg,"le personnel n'existe pas");
	}
    
}

void supprimer_personnel_gtk (personnel_db personnel[],int id,int  *n, char msg[])
{
	int pos = -1;
	int k = 0;
	while (( pos == -1) && ( k < *n ))
	{
		if (personnel[k].id == id)
			pos = k;
		else
			k++;
	}
	if ( pos == -1 )
		strcpy(msg,"Le personnel n'existe pas");
	else
	{
		for ( k = pos;k<=*n;k++)
		{
			personnel[k] = personnel[k+1];
		}
		*n = *n-1;
		strcpy(msg,"Le personnel est supprime");
	}
}


void init_personnel_db_gtk(personnel_db personnel[], int *n, char msg[])
{
        int k;
		k = *n-1;
		char smsg[50];

        while ( k > -1)
        {
			sprintf(smsg,"[!] Suppression du personnel '%s %s'\n",personnel[k].nom,personnel[k].prenom);
			supprimer_personnel(personnel,personnel[k].id,n);
			k = *n - 1;
			strcpy(msg,smsg);
		}
		strcpy(msg,"Le liste est vide\n");
		remove(FICHIER_PERSONNELS);
}

void ajouter_personnel_gtk(personnel_db personnel[],personnel_db p, int *n)
{
        printf("[!] Ajout d'un produit\n");
        personnel[*n] = p;
        printf("[!] Produit ajoute\n");
        *n = *n + 1;
}

void extraire_personnels(personnel_db p[], int *n)
{
	FILE *f;
	f = fopen(FICHIER_PERSONNELS,"r");
	if ( f != NULL)
	{
		debug("Chargement des donnees des personnels");
		while ( fscanf(f,"\n%d %s %s %s %d %s %d %s %s %d %d %d %s",&p[*n].id,p[*n].nom,p[*n].prenom,p[*n].sexe,&p[*n].age,p[*n].passeport,&p[*n].telephone,p[*n].nationalite,p[*n].specialite,&p[*n].date.jour,&p[*n].date.mois,&p[*n].date.annee,p[*n].mot_de_passe) != EOF)

		{
			debug("les donnees du '%d %s %s' sont chargees",p[*n].id,p[*n].nom,p[*n].prenom);
			*n = *n + 1;
		}
		fclose(f);
	}
	else
		debug("Impossible de charger les donnees des personnels");

}
void exporter_personnels(personnel_db p[], int n)
{
	int i=0;
	FILE *f;

	debug("Exportation des personnels");
	debug("le nombre des personnels a exporter : %d",n);
	remove(FICHIER_PERSONNELS);
    f = fopen(FICHIER_PERSONNELS,"w");

    if ( f != NULL)
		{
			for ( i = 0; i < n ; i++)
			{
				debug("Exportation du personnel '%s %s'",p[i].nom,p[i].prenom);
				fprintf(f,"\n%d %s %s %s %d %s %d %s %s %d %d %d %s",p[i].id,p[i].nom,p[i].prenom,p[i].sexe,p[i].age,p[i].passeport,p[i].telephone,p[i].nationalite,p[i].specialite,p[i].date.jour,p[i].date.mois,p[i].date.annee,p[i].mot_de_passe);
			}
			fclose(f);
		}
		else
			debug("Impossible d'ajouter '%s %s'",p[i].nom,p[i].prenom);

	debug("Exportation finie");
}
void affiche_choix(char variable[])
{
	dessiner_ligne(80);
        dessiner_milieu(80,"1/ Modifier le nom du personnel %s",variable);
	printf("\n");
        dessiner_milieu(80,"2/ Modifier le prenom du personnel %s",variable);
        printf("\n");
	dessiner_milieu(80,"3/ Modifier le sexe du personnel %s",variable);
        printf("\n");
	dessiner_milieu(80,"4/ Modifier l'age du personnel %s",variable);
        printf("\n");
	dessiner_milieu(80,"5/ Modifier le numero du passeport du personnel %s",variable);
        printf("\n");
	dessiner_milieu(80,"6/ Modifier le numero de telephone du personnel %s",variable);
        printf("\n");
	dessiner_milieu(80,"7/ Modifier la nationalite du personnel %s",variable);
        printf("\n");
	dessiner_milieu(80,"8/ Modifier la specialite du personnel %s",variable);
        printf("\n");
	dessiner_milieu(80,"0/ Retour");
	printf("\n");
	dessiner_ligne(80);
}


int recherche_personnel(personnel_db personnel[], int aid, int n)
{
	int pos,k;
	pos = -1;
	k = 0;
	while (( pos == -1) && ( k < n ))
	{
		if (personnel[k].id == aid)
			pos = k;
		else
			k++;
	}
	if ( pos == -1 )
		printf("[!] Le personnel n'existe pas\n");
	return pos;
}


void modifier_personnel(personnel_db personnel[], int n)
{
	int choix;
	int id;
	affiche_choix("personnel");

	printf("> ");
	scanf("%d",&choix);
	int i = -1;
	afficher_personnel_db(personnel,n);
	printf("[!] Entrez l'ID: ");
	scanf("%d",&id);

	i = recherche_personnel(personnel,id,n);
	if (i != -1)
	{
	switch (choix) {
	case 1: {printf("		[+] Vous avez choisi de modifier le nom du personnel: ");
		fflush(stdin);
		scanf("%s",personnel[i].nom);}
	break;		

	case 2: {printf("		[+] Vous avez choisi de modifier le prenom du personnel: ");
		fflush(stdin);
		scanf("%s",personnel[i].prenom);}
	break;		

	case 3: {printf("		[+] Vous avez choisi de modifier le sexe du personnel: ");
		fflush(stdin);
		scanf("%s",personnel[i].sexe);}
	break;		

	case 4: {printf("		[+] Vous avez choisi de modifier l'age du personnel: ");
		
		scanf("%d",&personnel[i].age);}
	break;		

	case 5: {printf("		[+] Vous avez choisi de modifier le numéro du passeport du personnel: ");
		
		scanf("%s",personnel[i].passeport);}
	break;		

	case 6: {printf("		[+] Vous avez choisi de modifier le numéro de téléphone du personnel: ");
		
		scanf("%d",&personnel[i].telephone);}
	break;		

	case 7: {printf("		[+] Vous avez choisi de modifier la ntionalité du personnel: ");
		fflush(stdin);
		scanf("%s",personnel[i].nationalite);}
	break;	

	case 8: {printf("		[+] Vous avez choisi de modifier la spécialité du personnel: ");
		fflush(stdin);
		scanf("%s",personnel[i].specialite);}
	break;	

	case 0: {}
	break;


	default: {printf("\nmauvais choix");} 
	}
	}
}

void choix_personnel(personnel_db personnel[], personnel_db *p, int n)
{		
	afficher_personnel_db(personnel,n);
	int choix , id ;
switch (choix) {
		case 1: {afficher_personnel_db(personnel, n);}
		break;
		case 2: {
				printf("\n[+] saisir l'identifiant du personnel à modifier: ");
				scanf("%d",&id);
				modifier_personnel(personnel,n);
			}
		break;
		case 0: {}
		break;
		default: {printf("\nmauvais choix");}
	}
}
void saisir_personnel(personnel_db personnel[], personnel_db *p, int n) // personnel_db : structure qui contient les variables des personnels
{
	int existe=0;
	int i=0;

	do
	{
	    
	existe =0;
        printf("		[+] Veuillez saisir l'id du personnel: ");
        scanf("%d",&p->id);
        for ( i = 0; i < n ; i++ ){
            if (personnel[i].id == p->id)
            {
                existe =1;
                printf ("		[!] Cet id est déjà existant\n");
            }

        }
	}
	while ((existe ==1)  );


	printf("		[+] Veuillez saisir le nom du personnel: ");
	fflush(stdin);
	scanf("%s",p->nom);

	printf("		[+] Veuillez saisir le prenom du personnel: ");
	fflush(stdin);
	scanf("%s",p->prenom);


	do 
	{ 	printf("		[+] Veuillez saisir le sexe du personnel (male/female): ");
	  	fflush(stdin);
		scanf("%s",p->sexe);
	}
	while (	(strcmp(p->sexe,"male") != 0 ) && (strcmp(p->sexe,"female") != 0 )); 
	
	do
	{
		printf("		[+] Veuillez saisir l'age du personnel (20-65): ");
		scanf("%d",&p->age);
	}
	while((p->age > 65) || (p->age < 20));

	do {
	printf("		[+] Veuillez saisir le numero de passeport du personnel (9 caractere): ");
	fflush(stdin);
	scanf("%s",p->passeport); 
	}
	while (strlen (p->passeport) != 9);
	
	printf("                [+] Veuillez saisir le numero du telephone du personnel: ");
	scanf("%d" ,&p->telephone);

	printf("		[+] Veuillez saisir la nationalite du personnel: ");
	fflush(stdin);
	scanf("%s",p->nationalite);

	printf("		[+] Veuillez saisir la specialité du personnel: ");
	fflush(stdin);
	scanf("%s",p->specialite);

	do {
	printf("		[+] Veuillez saisir le jour d'entrée: ");
	scanf ("%d",&(p->date.jour)); 

	}
	while ((p->date.jour > 31) || (p->date.jour < 1));
	
	do {
	printf("		[+] Veuillez saisir le mois d'entrée: ");
	scanf ("%d",&(p->date.mois)); 
	}
	while ((p->date.mois > 12) || (p->date.jour < 1));
	
	printf("		[+] Veuillez saisir l'annee d'entrée: ");
	scanf ("%d",&(p->date.annee));
	do {
	printf("		[+] Veuillez saisir le mot de passe du personnel (au moins 8 caractere): ");
	fflush(stdin);
	scanf("%s",p->mot_de_passe);
	cryptage(p->mot_de_passe); 
	} 
	while (strlen (p->mot_de_passe) < 8);  

}

void afficher_personnel(personnel_db p)
{
	printf("|");
	dessiner_colonne_d(5,"%d",p.id);
	dessiner_colonne_d(20,"%s",p.nom);
	dessiner_colonne_d(20,"%s",p.prenom);
	dessiner_colonne_d(8,"%s",p.sexe);
	dessiner_colonne_d(5,"%d",p.age);
	dessiner_colonne_d(10,"%s",p.passeport);
	dessiner_colonne_d(15,"%d",p.telephone);
	dessiner_colonne_d(20,"%s",p.nationalite);
	dessiner_colonne_d(20,"%s",p.specialite);
	dessiner_colonne_d(5,"%d",p.date.jour);
	dessiner_colonne_d(5,"%d",p.date.mois);
	dessiner_colonne_d(5,"%d",p.date.annee);
	dessiner_colonne_d(15,"%s",p.mot_de_passe);
	
	
	printf("\n");
}

void afficher_en_tete()
{
        printf("|");
        dessiner_colonne_d(5,"ID");
        dessiner_colonne_d(20,"Nom");
        dessiner_colonne_d(20,"Prenom");
	dessiner_colonne_d(8,"Sexe");
	dessiner_colonne_d(5,"Age");
        dessiner_colonne_d(10,"passeport");
	dessiner_colonne_d(15,"Telephone");
	dessiner_colonne_d(20,"Nationalite");
	dessiner_colonne_d(20,"Specialite");
	dessiner_colonne_d(5,"Jour");
	dessiner_colonne_d(5,"Mois");
	dessiner_colonne_d(5,"Annee");
	dessiner_colonne_d(15,"Mot de pass");
        printf("\n");
}

void ajouter_personnel(personnel_db personnel[], int *n)
{
	
	personnel_db p;
	printf("[!] Ajout d'un personnel\n");
	saisir_personnel(personnel,&p,*n);
	p.nombre_capteurs = 0;
	personnel[*n] = p;
	printf("[!] Le personnel est ajouté\n");
	*n = *n + 1;
	exporter_personnels(personnel ,*n);
}

void afficher_personnel_db(personnel_db personnel[], int n)
{
   int i = 0;
	printf("[!] Le nombre de personnels: %d\n",n);
	if ( n <= 0)
		printf("[!] La liste est vide\n");
	else
	{
		dessiner_ligne(165);
		afficher_en_tete();
		for (i=0;i<n;i++)
		{
			afficher_personnel (personnel[i]);
		}
		dessiner_ligne(165);
	}
}

void init_personnel_db(personnel_db personnel[], int *n)
{
        int k;
	k = *n-1;

        while ( k > -1)
        {
		printf("%d",k);
		
		printf("[!] Suppression du personnel '%s %s'\n",personnel[k].nom,personnel[k].prenom);
		supprimer_personnel(personnel,personnel[k].id,n);
		k = *n - 1;
	}
	printf("[!] La liste des personnels est initialisée\n");
	remove(FICHIER_PERSONNELS);
}

void supprimer_personnel(personnel_db personnel[], int id, int *n)
{
	int pos = -1;
	int k = 0;
	while (( pos == -1) && ( k < *n ))
	{
		if (personnel[k].id == id )
			pos = k;
		else
			k++;
	}
	if ( pos == -1 )
		printf("[!] Le personnel n'existe pas\n");
	else
	{
		for ( k = pos;k<=*n;k++)
		{
			personnel[k] = personnel[k+1];
		}
		*n = *n-1;
		printf("[!] Le personnel est supprimé\n");
		exporter_personnels(personnel ,*n);
	}

}

